import { computed, reactive, ref, Ref } from 'vue'
import { DocData } from '@/types'
import { getDocPageSum } from './utils'

/** 合同文档状态 */
export default function useDocState(docs: Ref<DocData[]>, docIndex = ref(0)) {
  /** 当前文档 */
  const doc = computed(
    () =>
      docs.value[docIndex.value] ||
      ({
        id: '',
        name: '',
        pages: []
      } as DocData)
  )

  /** 当前页面数据 */
  const pages = computed(() => doc.value?.pages || [])

  /** 页面累计高度列表 */
  const cumulativeHeights = computed(() => {
    const heights: number[] = []
    const list = pages.value

    list.forEach((item, index) => {
      heights.push((heights[index - 1] || 0) + item.h)
    })

    return heights
  })

  return reactive({
    /** 是否已激活文档区域 */
    activated: false,

    /** 文档列表 */
    docs,

    /** 当前文档 */
    doc,

    /** 当前文档索引 */
    docIndex,

    /** 激活操作的页面索引，非当前滚动页面索引 */
    pageIndex: 0,

    /** 当前页面数据 */
    pages,

    /** 页面数 */
    pageCount: computed(() => pages.value.length),

    /** 页面累计高度列表 */
    cumulativeHeights,

    /** 页面总高度 */
    totalHeight: computed(() => {
      const heights = cumulativeHeights.value

      return heights.at(heights.length - 1) || 0
    }),

    /** 页面统计 */
    pageSum: computed(() => getDocPageSum(doc.value))
  })
}
